import Utils from './index.js';

/**
 * 事件分发组件
 * 这里不是一个类，而是全局的对象
 */

// 全局变量，系统里所有事件都会存储在这个对象中
var callbacks = {},
    listenerCounter = 0;

let Events = {
    /**
     * 订阅事件
     */
    on: (event, callback, context) => {
        var id = listenerCounter ++;

        if(Utils.isArr(callback)) {
            return callback.forEach(cb => {
                Events.on(event, cb, context);
            });
        }
        
        callbacks[event] = callbacks[event] || [];
        callbacks[event].push({
            id: id,
            fn: callback,
            context: context
        });
        return () => {
            callbacks[event] = callbacks[events].filter(e => {
                return e.id !== id;
            });
        }
    },

    /**
     * 发布事件
     */
    emit: function(e)  {
        var args = Array.prototype.slice.call(arguments);
        args.splice(0, 1);
        
        if(typeof callbacks[e] !== 'undefined') {
            callbacks[e].forEach(event => {
                if(Utils.isFn(event.fn)) {
                    event.fn.apply(event.context, args);
                }
            });
            return callbacks[e].length;
        }
        return 0;
    }
}

export default Events;